package mybatis.transaction;

import mybatis.session.TransactionIsolationLevel;

import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Properties;

/**
 * 事务工厂接口定义
 *
 * @author richie696
 * @version 1.0
 * @since 2020/11/08
 */
public interface TransactionFactory {

    /**
     * 设置是否关闭连接的方法
     *
     * @param props 配置数据
     */
    default void setProperties(Properties props) {
    }

    /**
     * 新建默认事务的方法
     *
     * @param connection 数据库连接
     * @return 返回事务对象
     */
    Transaction newTransaction(Connection connection);

    /**
     * 新建事务的方法
     *
     * @param dataSource 数据源对象
     * @param level      事务级别
     * @return 返回事务对象
     * @see TransactionIsolationLevel 事务级别定义枚举
     */
    Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);

}
